草庐IT

C++ ifstream 到 char *

全部标签

C++ std::ctype<char>::widen() 的作用是什么?

根据C++标准(C++17草案(N4659)的§30.7.5.2.4),out不会对ch执行扩大操作,如果ch是char和out是std::ostream.这是否意味着std::ctype::widen()(即char->char)是否由标准保证为基本源字符集中所有字符的恒等函数(widen(ch)==ch)?如果是这样,这是否反过来意味着标准要求所有语言环境使用基本源字符集中相同的非宽(或多字节)字符编码?如果不是,好像是out,对于文字的字符编码有特殊选择,可能无法在所有语言环境中工作,即使它在某些语言环境中工作。也就是说,可能无法选择字rune字编码,例如out同时适用于所有语言

c++ - 为什么允许 std::atomic_{char,schar,etc.} typedef 是 std::atomic<T> 基类的类型定义,而不仅仅是 atomic<T>?

C++11[atomics.types.generic]p7:Thereshallbenamedtypescorrespondingtotheintegralspecializationsofatomic,asspecifiedinTable145,andanamedtypeatomic_boolcorrespondingtothespecifiedatomic.Eachnamedtypeisaeithertypedeftothecorrespondingspecializationorabaseclassofthecorrespondingspecialization.Ifitisa

c++ - 不能为 std::basic_string<T> foo = "foo"推导出 T = char?

问题:在下面的代码中,第一个示例的模板参数类型推导似乎失败了,但第二个示例却没有。我不明白为什么第一个样本无法推断出T=char.我会认为T从"foo"转换时可以推导出至std::bacis_string,但即使这不起作用,我也提供了第二个函数参数,我认为它会明确约束T至char.为什么它会失败?Doesnotwork:#include#includetemplatevoidprint(conststd::basic_string&a,conststd::basic_string&b){std::cout错误:string.cpp:14:5:error:nomatchingfuncti

c++ - 在 clang 中强制使用 `const char[]` 字符串文字

编译以下代码voidf(char*,constchar*,...){}voidf(constchar*,...){}intmain(){f("a","b");}用clang给我这个错误:prog.cpp:6:2:error:callto'f'isambiguousf("a","b");^prog.cpp:1:6:note:candidatefunctionvoidf(char*,constchar*,...){}^prog.cpp:2:6:note:candidatefunctionvoidf(constchar*,...){}^AFAIK字符串字面量在C++中是常量,因此重载规则应该

c# - 为什么 C# 和 VB.NET 隐式编码 char* 不同?

所以我有一个用C++编写的函数,看起来像这样...extern"C"__declspec(dllexport)int__stdcallSomeFunction(char*theData){//stuff}...我正在我当前的项目中使用它(用C#编写)。还有其他项目使用这个函数用VB写的,看起来像这样:PublicDeclareFunctionSomeFunctionLib"MyDLL.dll"_Alias"_SomeFunction@4"(ByValtheDataAsString)AsInteger所以我尝试在C#中编写一个等效项,但发现使用字符串类型实际上对我不起作用-字符串会返回与

c++ - 使用字符串文字初始化 vector<char>

以下代码的正确行为是什么?#include#includeintmain(){std::vectorv={"y","z"};std::cout这被Clang接受了但不是GCC和VC++这不是未定义的行为吗? 最佳答案 在深入研究标准之后,我发现了以下内容:在这里,我正在尝试初始化vector使用两个字符串文字,而不是两个字符。使用vector(initializer_list).在这种情况下,vector(initializer_list).但是字符串文字的类型是“nconstchar数组”,因此初始化列表构造函数不匹配。这不会导致

C++ cin char 逐个符号读取

我需要逐个符号地阅读。但是直到输入结束我才知道如何阅读。例如测试系统将cin>>somecharvariablem次。我必须逐个符号地阅读所有字符。只有m次。我该怎么做? 最佳答案 有几种方法可以一次读一个字,直到你读完所有的字,但不一定是最好的。就我个人而言,我会使用以下代码:charc;while(cin.get(c)){//Processchere.}如果您只需要读取m个字符,请考虑使用for循环:charc;for(unsignedinti=0;i只要满足两个条件,就会运行循环:(1)读取的字符少于m,以及(2)仍有字符要读

c++ - char* 和 int* 的区别

char*和int*有什么区别?当然,它们是不同的类型,但是我怎么写char*s1="helloworld";作为"helloworld"它不是一个字符,它是一个字符数组,我不会写*s1作为char*s1={'h','e','l','l','o','','w','o','r','l','d'};和int*a={2,3,1,45,6};有什么区别? 最佳答案 这很简单:一个字符串文字,即"foobar"被编译成一个字符数组,存储在程序的静态部分(即,所有常量存储的地方)和空终止。然后,将this分配给变量只是将指向该内存的指针分配给变

c++ - 将 char 指针传递给接受对 char 数组的引用的函数

我正在尝试调用这个方法#defineSIZE16voidDoSomething(char(&value)[SIZE]){}从这个方法:voidBeforeDoingSomething(char*value,intlen){if(len==SIZE){DoSomething(value);}}尝试这样做会给我这个错误:areferenceoftype"char(&)[16]"(notconst-qualified)cannotbeinitializedwithavalueoftype"char*"关于如何让编译器接受函数BeforeDoingSomething中传递的value的任何提示

c++ - 使用 g++ 使用 NULL const char* 避免不正确的 std::string 初始化

是否有任何g++选项可以检测到带有NULLconstchar*的std::string的不正确初始化?我正在将一些int字段转换为std::string字段,即:structFoo{intid;Foo():id(0){}};...变成了:structFoo{std::stringid;Foo():id(0){}//oooops!};我完全忽略了使用0进行的错误“id”初始化,而g++根本没有给我任何警告。这个错误是在运行时检测到的(std::string构造函数抛出异常),但我真的很想在编译时检测到这些东西。有什么办法吗? 最佳答案